package handler

import (
	"net/http"
	"strconv"

	"github.com/gin-gonic/gin"
	"github.com/yourusername/rss-reader-ai/internal/service"
)

// =====================================================
// AIHandler AI处理器
// =====================================================

// AIHandler AI HTTP处理器
type AIHandler struct {
	aiService service.AIService
}

// NewAIHandler 创建AI处理器
func NewAIHandler(aiService service.AIService) *AIHandler {
	return &AIHandler{
		aiService: aiService,
	}
}

// RegisterRoutes 注册路由
func (h *AIHandler) RegisterRoutes(router *gin.RouterGroup) {
	ai := router.Group("/ai")
	{
		ai.POST("/generate/:id", h.GenerateSummary)      // 生成单篇摘要
		ai.POST("/batch", h.BatchGenerate)               // 批量生成摘要
		ai.POST("/regenerate/:id", h.RegenerateSummary)  // 重新生成摘要
		ai.GET("/pending", h.GetPendingCount)            // 获取待处理数量
	}
}

// =====================================================
// API 请求/响应结构
// =====================================================

// BatchGenerateRequest 批量生成请求
type BatchGenerateRequest struct {
	Limit int `json:"limit"` // 处理数量
}

// PendingCountResponse 待处理数量响应
type PendingCountResponse struct {
	Count int64 `json:"count"`
}

// BatchGenerateResponse 批量生成响应
type BatchGenerateResponse struct {
	SuccessCount int `json:"success_count"`
	TotalCount   int `json:"total_count"`
}

// =====================================================
// API 处理器
// =====================================================

// GenerateSummary 为单篇文章生成摘要
// @Summary 生成文章摘要
// @Tags AI
// @Produce json
// @Param id path int true "文章ID"
// @Success 200 {object} Response
// @Router /api/ai/generate/{id} [post]
func (h *AIHandler) GenerateSummary(c *gin.Context) {
	// 解析路径参数
	id, err := strconv.ParseInt(c.Param("id"), 10, 64)
	if err != nil {
		ErrorResponse(c, http.StatusBadRequest, "无效的ID")
		return
	}

	// 调用 Service
	if err := h.aiService.GenerateSummary(id); err != nil {
		ErrorResponse(c, http.StatusInternalServerError, err.Error())
		return
	}

	// 返回响应
	SuccessWithMessage(c, "摘要生成成功", nil)
}

// BatchGenerate 批量生成摘要
// @Summary 批量生成摘要
// @Tags AI
// @Accept json
// @Produce json
// @Param request body BatchGenerateRequest true "批量生成请求"
// @Success 200 {object} Response{data=BatchGenerateResponse}
// @Router /api/ai/batch [post]
func (h *AIHandler) BatchGenerate(c *gin.Context) {
	// 解析请求
	var req BatchGenerateRequest
	if err := c.ShouldBindJSON(&req); err != nil {
		// 使用默认值
		req.Limit = 10
	}

	// 调用 Service
	successCount, err := h.aiService.BatchGenerateSummaries(req.Limit)
	if err != nil {
		ErrorResponse(c, http.StatusInternalServerError, err.Error())
		return
	}

	// 返回响应
	SuccessResponse(c, BatchGenerateResponse{
		SuccessCount: successCount,
		TotalCount:   req.Limit,
	})
}

// RegenerateSummary 重新生成摘要
// @Summary 重新生成摘要
// @Tags AI
// @Produce json
// @Param id path int true "文章ID"
// @Success 200 {object} Response
// @Router /api/ai/regenerate/{id} [post]
func (h *AIHandler) RegenerateSummary(c *gin.Context) {
	// 解析路径参数
	id, err := strconv.ParseInt(c.Param("id"), 10, 64)
	if err != nil {
		ErrorResponse(c, http.StatusBadRequest, "无效的ID")
		return
	}

	// 调用 Service
	if err := h.aiService.RegenerateSummary(id); err != nil {
		ErrorResponse(c, http.StatusInternalServerError, err.Error())
		return
	}

	// 返回响应
	SuccessWithMessage(c, "摘要重新生成成功", nil)
}

// GetPendingCount 获取待生成摘要的文章数
// @Summary 获取待处理数量
// @Tags AI
// @Produce json
// @Success 200 {object} Response{data=PendingCountResponse}
// @Router /api/ai/pending [get]
func (h *AIHandler) GetPendingCount(c *gin.Context) {
	// 调用 Service
	count, err := h.aiService.GetPendingCount()
	if err != nil {
		ErrorResponse(c, http.StatusInternalServerError, err.Error())
		return
	}

	// 返回响应
	SuccessResponse(c, PendingCountResponse{
		Count: count,
	})
}
